package pers.xiaojun.boot.security.config.properties;

import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;

import java.util.Collections;
import java.util.List;

/**
 * Security 配置
 *
 * @author xiaojun
 * @since 2025-10-04
 */
@Data
@ConfigurationProperties(prefix = "xiaojun.security")
@Validated
public class SecurityProperties {

    /**
     * Mock 测试模式：用户本地测试时模拟用户Token，而不是使用正式Token，方便进行测试，需要结合 mockTokePrefix 使用
     * <p>
     * 注意：生产模式要关掉该模式
     */
    private boolean mock = false;

    /**
     * 模拟Token前缀，格式为：test用户id，用户模拟指定用户
     */
    private String mockTokenPrefix = "test";

    /**
     * 获取访问令牌（Token）请求头属性名称
     */
    @NotEmpty(message = "Token Header 不能为空")
    private String tokenHeader = "Authorization";

    /**
     * Token前缀
     */
    private String tokenPrefix = "Bearer ";

    /**
     * 无需鉴权 URL 列表
     */
    private List<String> permitAllUrls = Collections.emptyList();


    /**
     * passwordEncoder 加密复杂度，越高开销越大
     */
    private Integer passwordEncoderLength = 4;
}
